package com.csea;

/**
 * 方法重载Lambda表达式
 *
 * @author Csea
 * @title
 * @date 2019/12/11 21:17
 */
public class App4 {

    interface Param1 {
        void outInfo(String info);
    }

    interface Param2 {
        void outInfo(String info);
    }

    public void lambdaMethod(Param1 param1) {
        param1.outInfo("Hello Csea");
    }

    public void lambdaMethod(Param2 param2) {
        param2.outInfo("Hi Csea");
    }

    public static void main(String[] args) {
        App4 app4 = new App4();

        app4.lambdaMethod(new Param1() {
            @Override
            public void outInfo(String info) {
                System.out.println(info);
            }
        });

        /**
         * lambda存在类型检查 -> 自动推到lambda表达式目标类型
         * lambdaMethod() -> 方法 -> 重载方法
         *      -> Param1 函数式接口
         *      -> Param2 函数式接口
         *      调用方法 -> 传递Lambda表达式 -> 自动推导
         *          -> Param1 |  Param2
         */

        /**
         * 这里抛红是因为 他对两个lambda表达式去进行了匹配
         * 在某情况下限制了传统语法结构中功能操作
         * 如果在出现方法重载的类型中，参数都是函数式接口的情况，请使用匿名内部类的实现替代lambda
         */
//        app4.lambdaMethod((String info) -> {
//            System.out.println(info);
//        });
    }
}
